package cn.iocoder.yudao.module.reading.dal.mysql.classes;

import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.reading.dal.dataobject.classes.ClassDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 班级 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface ClassMapper extends BaseMapperX<ClassDO> {

    /**
     * 根据用户ID查询班级列表（通过班级成员表关联）
     *
     * @param userId 用户ID
     * @return 班级列表
     */
    default List<ClassDO> selectByUserId(Long userId) {
        return selectList(new LambdaQueryWrapperX<ClassDO>()
                .eq(ClassDO::getIsActive, true)
                .orderByDesc(ClassDO::getCreateTime));
    }

    /**
     * 根据班级口令查询班级
     *
     * @param classCode 班级口令
     * @return 班级信息
     */
    default ClassDO selectByClassCode(String classCode) {
        return selectOne(new LambdaQueryWrapperX<ClassDO>()
                .eq(ClassDO::getClassCode, classCode)
                .eq(ClassDO::getIsActive, true));
    }

    /**
     * 根据创建者ID查询班级列表
     *
     * @param creatorId 创建者ID
     * @return 班级列表
     */
    default List<ClassDO> selectByCreatorId(Long creatorId) {
        return selectList(new LambdaQueryWrapperX<ClassDO>()
                .eq(ClassDO::getCreatorId, creatorId)
                .eq(ClassDO::getIsActive, true)
                .orderByDesc(ClassDO::getCreateTime));
    }

    /**
     * 检查班级口令是否存在
     *
     * @param classCode 班级口令
     * @return 是否存在
     */
    default boolean existsByClassCode(String classCode) {
        return selectCount(new LambdaQueryWrapperX<ClassDO>()
                .eq(ClassDO::getClassCode, classCode)) > 0;
    }

}
